import { defineStore } from 'pinia'
import type { RouteRecordRaw } from 'vue-router'
import { login, getUserInfo, logout } from '@/api/admin'
import cache  from '@/utils/cache'
import { getToken } from '@/utils/auth'
import { TOKEN_KEY } from '@/utils/enums/cacheEnums'
import { filterAsyncRoutes } from '@/utils/router'
interface UserState {
    token: string
    userInfo: Record<string, any>
    routes: RouteRecordRaw[]
    permissions: string[]
}

export const useUserStore = defineStore('user', {
    state: (): UserState => ({
        token: getToken() ||'',
        userInfo: {},
        routes: [],
        permissions: []
    }),
    getters: {

    },
    actions: {
        //获取用户信息
        async getUserInfo() {
            return new Promise((resolve, reject) => {
                getUserInfo().then(res => {
                    this.userInfo = res.userInfo
                    // res.routes = [
                    //     {
                    //         id:1,
                    //         path:'system',
                    //         name:'系统',
                    //         parent_id:0,
                    //         component:'',
                    //         type:1,
                    //         icon:'ant-icon-HomeOutlined',
                    //         perms:'',
                    //         hidden:false,
                    //         children:[
                    //             {
                    //                 id:2,
                    //                 path:'workbench',
                    //                 name:'工作台',
                    //                 parent_id:1,
                    //                 component:'system/workbench/index',
                    //                 type:2,
                    //                 icon:'ant-icon-HomeOutlined',
                    //                 perms:'',
                    //                 hidden:false,
                    //             },
                    //             {
                    //                 id:4,
                    //                 path:'permission',
                    //                 name:'权限管理',
                    //                 parent_id:1,
                    //                 component:'',
                    //                 type:1,
                    //                 icon:'ant-icon-HomeOutlined',
                    //                 perms:'',
                    //                 hidden:false,
                    //                 children:[
                    //                     {
                    //                         id:5,
                    //                         path:'auth',
                    //                         name:'权限列表',
                    //                         parent_id:4,
                    //                         component:'system/permission/auth/index',
                    //                         type:2,
                    //                         icon:'ant-icon-HomeOutlined',
                    //                         perms:'',
                    //                         hidden:false,
                    //                     },
                    //                     {
                    //                         id:6,
                    //                         path:'admin',
                    //                         name:'管理员',
                    //                         parent_id:4,
                    //                         component:'system/permission/admin/index',
                    //                         type:2,
                    //                         icon:'ant-icon-HomeOutlined',
                    //                         perms:'',
                    //                         hidden:false,
                    //                     },
                    //                     {
                    //                         id:7,
                    //                         path:'role',
                    //                         name:'角色',
                    //                         parent_id:4,
                    //                         component:'system/permission/role/index',
                    //                         type:2,
                    //                         icon:'ant-icon-HomeOutlined',
                    //                         perms:'',
                    //                         hidden:false,
                    //                     }
                    //                 ]
                    //             },{
                    //                 id:10,
                    //                 path:'organize',
                    //                 name:'组织',
                    //                 parent_id:1,
                    //                 component:'',
                    //                 type:1,
                    //                 icon:'ant-icon-HomeOutlined',
                    //                 perms:'',
                    //                 hidden:false,
                    //                 children:[
                    //                     {
                    //                         id:11,
                    //                         path:'organization',
                    //                         name:'组织列表',
                    //                         parent_id:10,
                    //                         component:'system/organize/OrganizationList/index',
                    //                         type:2,
                    //                         icon:'ant-icon-HomeOutlined',
                    //                         perms:'',
                    //                         hidden:false,
                    //                     }
                    //                 ]
                    //             },{
                    //                 id:8,
                    //                 path:'setting',
                    //                 name:'设置',
                    //                 parent_id:1,
                    //                 component:'',
                    //                 type:1,
                    //                 icon:'ant-icon-HomeOutlined',
                    //                 perms:'',
                    //                 hidden:false,
                    //                 children:[
                    //                     {
                    //                         id:9,
                    //                         path:'system',
                    //                         name:'系统设置',
                    //                         parent_id:8,
                    //                         component:'system/setting/system/index',
                    //                         type:2,
                    //                         icon:'ant-icon-HomeOutlined',
                    //                         perms:'',
                    //                         hidden:false,
                    //                     }
                    //                 ]
                    //             }
                    //         ]
                    //     }
                    // ];
                    this.routes = filterAsyncRoutes(res.routes);
                    this.permissions = res.permissions
                    // 获取用户信息后自动连接 WebSocket
                    // import('@/utils/websocket').then(module => {
                    //     module.default.getInstance();
                    // });
                    resolve(res)
                }).catch(err => {
                    reject(err)
                })
            })
        },
        //登录
        async login({ username, password, remember }: { username: string, password: string, remember: boolean }) {
            return new Promise((resolve, reject) => {
                login({ username, password, remember }).then(res => {
                    this.token = res.token
                    cache.set(TOKEN_KEY, res.token)
                    resolve(res)
                }).catch(err => {
                    reject(err)
                })
            })
        },
        //退出登录
       async logout() {
            return new Promise((resolve, reject) => {
                logout().then(res => {
                    resolve(res)
                    this.token = ''
                    cache.remove(TOKEN_KEY)
                    this.routes = []
                    this.permissions = []
                    this.userInfo = {}
                }).catch(err => {
                    reject(err)
                })
            })
       },
    }
})

export default useUserStore
